普通 (1) | void operator delete (void* ptr) throw(); |
---|---|
nothrow (2) | void operator delete (void* ptr, const std::nothrow_t& nothrow_constant) throw(); |
placement (3) | void operator delete (void* ptr, void* voidptr2) throw(); |
普通 (1) | void operator delete (void* ptr) noexcept; |
---|---|
nothrow (2) | void operator delete (void* ptr, const std::nothrow_t& nothrow_constant) noexcept; |
placement (3) | void operator delete (void* ptr, void* voidptr2) noexcept; |
普通 (1) | void operator delete (void* ptr) noexcept; |
---|---|
nothrow (2) | void operator delete (void* ptr, const std::nothrow_t& nothrow_constant) noexcept; |
placement (3) | void operator delete (void* ptr, void* voidptr2) noexcept; |
帶大小 (4) | void operator delete (void* ptr, std::size_t size) noexcept; |
nothrow 帶大小 (5) | void operator delete (void* ptr, std::size_t size, const std::nothrow_t& nothrow_constant) noexcept; |
::operator delete(ptr)
。::operator delete(ptr)
。operator delete
的過載都在全域性名稱空間中宣告,而不是在 std 名稱空間內。<new>
。operator delete
是一個常規函式,可以像任何其他函式一樣顯式呼叫。但在 C++ 中,delete
是一個具有非常特定行為的運算子:帶有 delete
運算子的表示式首先呼叫適當的解構函式(對於類型別),然後呼叫*解構函式*。operator delete
的成員函式(如果存在)。在所有其他情況下,它是全域性函式 operator delete
(即此函式——或更具體的過載)。如果 delete
表示式前面帶有*作用域運算子*(即 ::operator delete
),則只考慮全域性*解構函式*。delete
表示式始終呼叫單引數簽名(例如(1))。delete
表示式始終使用接受指標(例如(1))或指標和大小(例如(4))的簽名。總是優先使用帶*size*的版本(4),除非過載提供了與指標型別更匹配的匹配。delete
運算子始終呼叫此函式的普通版本,並且每個引數只調用一次)。這些其他簽名僅在物件構造失敗時由*new表示式*自動呼叫(例如,如果物件的建構函式在由帶 nothrow 的*new表示式*構造時丟擲異常,則會呼叫接受 nothrow 引數的匹配 operator delete 函式)。void*
。operator new
返回,並且尚未透過先前呼叫此函式被釋放。operator new
返回,並且尚未透過先前呼叫此函式被釋放。
|
|
MyClass constructed MyClass destroyed |